//
//  ScenesFoaMixer.h
//  ScenesPlayer
//
//  Created by Branch on 2017/5/2.
//  Copyright © 2017年 Scenes. All rights reserved.
//

#ifndef __ScenesPlayer_ScenesFoaMixer_H__
#define __ScenesPlayer_ScenesFoaMixer_H__

#include <stdint.h>
class ScenesFoaBinauralizer;
/**
 Foa音频混合生成器
 */
class ScenesFoaMixer {

public:
	ScenesFoaMixer();
	~ScenesFoaMixer();

    
    /**
     打开FOA音频转换器

     @param nsamples 一次处理音频的采样数，目前支持输入 ：1024，输入其他数值都会返回失败
     @return 成功返回 true，失败返回 false
     */
    bool openMixer(uint32_t nsamples);
    
    
    /**
     关闭FOA音频转换器
     */
    void closeMixer();
    
    
    

    
    /**
     把一段四声道的音频转换成双声道的立体声。
     
     输入的数据格式为浮点型平面格式 （ffmpeg中的：AV_SAMPLE_FMT_FLTP）
     
     输入输出数据应该都是nsamples个采样（openMixer函数的输入参数），也就是说
     dataW，dataY，dataZ，dataX，dataL，dataR的buff长度都应该是：sizeof(float)*nsamples

     @param dataW FOA源音频的W通道数据地址
     @param dataY FOA源音频的Y通道数据地址
     @param dataZ FOA源音频的Z通道数据地址
     @param dataX FOA源音频的X通道数据地址
     @param matrix4 当前VR场景的旋转矩阵（4x4 column-major 的矩阵）
     @param dataL 接收输出双声道的左声道的buff地址
     @param dataR 接收输出双声道的右声道的buff地址
     @return 成功返回 true，失败返回 false
     */
    bool processAudio(float* dataW,float* dataY,float* dataZ,float* dataX,
                      float* matrix4,float* dataL,float* dataR);
    
    
private:
    float** _srcData;
    float** _destData;
    ScenesFoaBinauralizer* _binauralizer;
    uint32_t _nsamples;
};


#endif /* __ScenesPlayer_ScenesFoaMixer_H__ */
